/**
 * 简化版权限检查组件
 * 
 * 基于useSimpleAuth钩子提供的功能，实现简单的权限检查
 * 不涉及复杂的缓存机制，适合毕业设计使用
 */
import React from 'react';
import { Tooltip } from 'antd';
import useSimpleAuth from '../../hooks/useSimpleAuth';

interface SimplePermissionCheckProps {
  children: React.ReactNode;         // 子元素
  permission?: string;               // 所需权限
  permissions?: string[];            // 权限列表
  requireAll?: boolean;              // 是否需要满足所有权限
  region?: string;                   // 检查区域权限
  author?: string;                   // 检查作者权限
  fallback?: React.ReactNode;        // 无权限时的替代内容
  alwaysRender?: boolean;            // 始终渲染内容
  showTooltip?: boolean;             // 是否显示提示
  tooltipTitle?: string;             // 提示文本
}

/**
 * 简化版权限检查组件
 * 根据用户权限决定是否渲染子元素
 */
const SimplePermissionCheck: React.FC<SimplePermissionCheckProps> = ({
  children,
  permission,
  permissions,
  requireAll = false,
  region,
  author,
  fallback = null,
  alwaysRender = false,
  showTooltip = false,
  tooltipTitle = '您没有权限查看此内容'
}) => {
  const { hasPermission, canAccessRegion, canManageAuthor } = useSimpleAuth();
  
  // 检查权限
  let hasAccess = true;
  
  // 1. 检查权限码
  if (permission) {
    hasAccess = hasAccess && hasPermission(permission);
  }
  
  // 2. 检查权限列表
  if (permissions && permissions.length > 0) {
    if (requireAll) {
      // 需要满足所有权限
      hasAccess = hasAccess && permissions.every(p => hasPermission(p));
    } else {
      // 满足任意一个权限即可
      hasAccess = hasAccess && permissions.some(p => hasPermission(p));
    }
  }
  
  // 3. 检查区域权限
  if (region) {
    hasAccess = hasAccess && canAccessRegion(region);
  }
  
  // 4. 检查作者权限
  if (author) {
    hasAccess = hasAccess && canManageAuthor(author);
  }
  
  // 如果有权限，直接渲染子元素
  if (hasAccess) {
    return <>{children}</>;
  }
  
  // 如果需要始终渲染，并且启用提示
  if (alwaysRender) {
    if (showTooltip) {
      return (
        <Tooltip title={tooltipTitle}>
          <span style={{ cursor: 'not-allowed', opacity: 0.6 }}>
            {children}
          </span>
        </Tooltip>
      );
    }
    
    // 仅渲染但不添加提示
    return <span style={{ opacity: 0.6 }}>{children}</span>;
  }
  
  // 没有权限且不需要始终渲染，显示替代内容
  return <>{fallback}</>;
};

export default SimplePermissionCheck; 